{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Notes:\n",
    " * same as 17, but with extra scalar features, STD for double/half period views, double period individual transits"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['/mnt/tess/astronet/checkpoints/extended_26_run_18/1/AstroCNNModel_extended_20210829_140416',\n",
       " '/mnt/tess/astronet/checkpoints/extended_26_run_18/2/AstroCNNModel_extended_20210829_143642',\n",
       " '/mnt/tess/astronet/checkpoints/extended_26_run_18/3/AstroCNNModel_extended_20210829_150959',\n",
       " '/mnt/tess/astronet/checkpoints/extended_26_run_18/4/AstroCNNModel_extended_20210829_154458',\n",
       " '/mnt/tess/astronet/checkpoints/extended_26_run_18/5/AstroCNNModel_extended_20210829_161825',\n",
       " '/mnt/tess/astronet/checkpoints/extended_26_run_18/6/AstroCNNModel_extended_20210829_165135',\n",
       " '/mnt/tess/astronet/checkpoints/extended_26_run_18/7/AstroCNNModel_extended_20210829_172520',\n",
       " '/mnt/tess/astronet/checkpoints/extended_26_run_18/8/AstroCNNModel_extended_20210829_175801',\n",
       " '/mnt/tess/astronet/checkpoints/extended_26_run_18/9/AstroCNNModel_extended_20210829_183624',\n",
       " '/mnt/tess/astronet/checkpoints/extended_26_run_18/10/AstroCNNModel_extended_20210829_190958']"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import os\n",
    "\n",
    "chkpt_root = '/mnt/tess/astronet/checkpoints/extended_26_run_18'\n",
    "data_files = '/mnt/tess/astronet/tfrecords-26-val/*'\n",
    "tces_file = '/mnt/tess/astronet/tces-v7-val.csv'\n",
    "\n",
    "nruns = 10\n",
    "\n",
    "def load_ensemble(chkpt_root, nruns):\n",
    "    checkpts = []\n",
    "    for i in range(nruns):\n",
    "        parent = os.path.join(chkpt_root, str(i + 1))\n",
    "        if not os.path.exists(parent):\n",
    "            break\n",
    "        all_dirs = os.listdir(parent)\n",
    "        if not all_dirs:\n",
    "            break\n",
    "        d, = all_dirs\n",
    "        checkpts.append(os.path.join(parent, d))\n",
    "    return checkpts\n",
    "\n",
    "paths = load_ensemble(chkpt_root, nruns)\n",
    "paths"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Running model 1\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "2228 records\n",
      "Running model 2\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "2228 records\n",
      "Running model 3\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "2228 records\n",
      "Running model 4\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "2228 records\n",
      "Running model 5\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "2228 records\n",
      "Running model 6\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "2228 records\n",
      "Running model 7\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "2228 records\n",
      "Running model 8\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "2228 records\n",
      "Running model 9\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "2228 records\n",
      "Running model 10\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "2228 records\n"
     ]
    }
   ],
   "source": [
    "import getpass\n",
    "import os\n",
    "from astronet import predict\n",
    "import tensorflow as tf\n",
    "\n",
    "\n",
    "def run_predictions(path):\n",
    "    predict.FLAGS = predict.parser.parse_args([\n",
    "      '--model_dir', path,\n",
    "      '--data_files', data_files,\n",
    "      '--output_file', '',\n",
    "    ])\n",
    "\n",
    "    return predict.predict()\n",
    "\n",
    "\n",
    "paths = load_ensemble(chkpt_root, nruns)\n",
    "ensemble_preds = []\n",
    "config = None\n",
    "for i, path in enumerate(paths):\n",
    "    print(f'Running model {i + 1}')\n",
    "    preds, config = run_predictions(path)\n",
    "    ensemble_preds.append(preds.set_index('tic_id'))\n",
    "    print()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [],
   "source": [
    "labels = ['disp_E', 'disp_N', 'disp_J', 'disp_S', 'disp_B']\n",
    "\n",
    "col_e = labels.index('disp_E')\n",
    "thresh = config.hparams.prediction_threshold\n",
    "thresh = 0.3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "\n",
    "agg_preds = {}\n",
    "\n",
    "for preds in ensemble_preds:\n",
    "    for tic_id in preds.index:\n",
    "        if tic_id not in agg_preds:\n",
    "            agg_preds[tic_id] = []\n",
    "\n",
    "        row = preds[preds.index == tic_id]\n",
    "        pred_v = row.values[0]\n",
    "        if len(row.values) > 1:\n",
    "            print(f'Warning: duplicate predictions for {tic_id}')\n",
    "        if pred_v[col_e] >= thresh:\n",
    "            agg_preds[tic_id].append('disp_E')\n",
    "        else:\n",
    "            masked_v = [v if i != col_e else 0 for i, v in enumerate(pred_v)]\n",
    "            agg_preds[tic_id].append(preds.columns[np.argmax(masked_v)])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [],
   "source": [
    "final_preds = []\n",
    "for tic_id in list(agg_preds.keys()):\n",
    "    counts = {l: 0 for l in labels}\n",
    "    for e in agg_preds[tic_id]:\n",
    "        counts[e] += 1\n",
    "    maxcount = max(counts.values())\n",
    "    counts.update({\n",
    "        'tic_id': tic_id,\n",
    "        'maxcount': maxcount,\n",
    "    })\n",
    "    final_preds.append(counts)\n",
    "    \n",
    "final_preds = pd.DataFrame(final_preds).set_index('tic_id')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [],
   "source": [
    "tce_table = pd.read_csv(tces_file, header=0).set_index('tic_id')\n",
    "tce_labels = tce_table[labels]\n",
    "\n",
    "pl = final_preds.join(tce_labels, on='tic_id', how='left', lsuffix='_p')\n",
    "\n",
    "pl.head()\n",
    "pd.set_option('display.max_columns', None)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Recall: 0.9739130434782609\n",
      "Precision: 0.7832167832167832\n"
     ]
    }
   ],
   "source": [
    "ppos = (pl['disp_E_p'] > 0)\n",
    "pos = (pl['disp_E'] > 0)\n",
    "\n",
    "pneg = (pl['disp_E_p'] == 0)\n",
    "neg = (pl['disp_E'] == 0)\n",
    "\n",
    "print('Recall:', len(pl[ppos & pos]) / len(pl[pos]))\n",
    "print('Precision:', len(pl[ppos & pos]) / len(pl[ppos]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "118412801\n",
      "141753278\n",
      "158159741\n",
      "276978548\n",
      "349412074\n",
      "404220255\n"
     ]
    }
   ],
   "source": [
    "for i in pl[pos & pneg][[]].join(tce_table, on='tic_id', how='left').index:\n",
    "    print(i)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "113496703\n",
      "118398402\n",
      "201601338\n",
      "219945452\n",
      "276738707\n",
      "278413697\n",
      "279475851\n",
      "281578420\n",
      "291374558\n",
      "299945796\n",
      "311103813\n",
      "319865847\n",
      "320356995\n",
      "326693475\n",
      "363404187\n",
      "373919592\n",
      "384341508\n",
      "384740598\n",
      "404733023\n",
      "404851508\n",
      "404851552\n",
      "404851966\n",
      "404934011\n",
      "40602499\n",
      "406971913\n",
      "407615704\n",
      "446698252\n",
      "466098383\n",
      "283330382\n",
      "375927073\n",
      "14209654\n",
      "188258751\n",
      "267924099\n",
      "356776209\n",
      "136651206\n",
      "371070027\n",
      "395164445\n",
      "417208086\n",
      "469465627\n",
      "186483050\n",
      "252588526\n",
      "431338538\n",
      "192591652\n",
      "198555242\n",
      "279064110\n",
      "468608862\n",
      "127846210\n",
      "21133246\n",
      "261814771\n",
      "269291226\n",
      "408945155\n",
      "648359612\n",
      "82242456\n",
      "56861756\n",
      "138847344\n",
      "97487520\n",
      "159636125\n",
      "230197530\n",
      "284266496\n",
      "298647682\n",
      "27896467\n",
      "405687343\n"
     ]
    }
   ],
   "source": [
    "for i in pl[neg & ppos][[]].join(tce_table, on='tic_id', how='left').index:\n",
    "    print(i)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>disp_E</th>\n",
       "      <th>disp_N</th>\n",
       "      <th>disp_J</th>\n",
       "      <th>disp_S</th>\n",
       "      <th>disp_B</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>tic_id</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>404220255</th>\n",
       "      <td>0.033367</td>\n",
       "      <td>0.077519</td>\n",
       "      <td>0.180121</td>\n",
       "      <td>0.010056</td>\n",
       "      <td>0.906537</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>404220255</th>\n",
       "      <td>0.013797</td>\n",
       "      <td>0.088868</td>\n",
       "      <td>0.285476</td>\n",
       "      <td>0.004498</td>\n",
       "      <td>0.902807</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>404220255</th>\n",
       "      <td>0.013685</td>\n",
       "      <td>0.081640</td>\n",
       "      <td>0.438843</td>\n",
       "      <td>0.003629</td>\n",
       "      <td>0.871949</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>404220255</th>\n",
       "      <td>0.044388</td>\n",
       "      <td>0.081090</td>\n",
       "      <td>0.253320</td>\n",
       "      <td>0.006751</td>\n",
       "      <td>0.832106</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>404220255</th>\n",
       "      <td>0.015785</td>\n",
       "      <td>0.077666</td>\n",
       "      <td>0.274483</td>\n",
       "      <td>0.003099</td>\n",
       "      <td>0.905408</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>404220255</th>\n",
       "      <td>0.070875</td>\n",
       "      <td>0.080141</td>\n",
       "      <td>0.141413</td>\n",
       "      <td>0.006552</td>\n",
       "      <td>0.846100</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>404220255</th>\n",
       "      <td>0.026953</td>\n",
       "      <td>0.082739</td>\n",
       "      <td>0.247282</td>\n",
       "      <td>0.006873</td>\n",
       "      <td>0.899505</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>404220255</th>\n",
       "      <td>0.054814</td>\n",
       "      <td>0.085567</td>\n",
       "      <td>0.165434</td>\n",
       "      <td>0.012717</td>\n",
       "      <td>0.886349</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>404220255</th>\n",
       "      <td>0.039566</td>\n",
       "      <td>0.079213</td>\n",
       "      <td>0.205911</td>\n",
       "      <td>0.007287</td>\n",
       "      <td>0.875733</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>404220255</th>\n",
       "      <td>0.033271</td>\n",
       "      <td>0.067278</td>\n",
       "      <td>0.190820</td>\n",
       "      <td>0.011012</td>\n",
       "      <td>0.910060</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             disp_E    disp_N    disp_J    disp_S    disp_B\n",
       "tic_id                                                     \n",
       "404220255  0.033367  0.077519  0.180121  0.010056  0.906537\n",
       "404220255  0.013797  0.088868  0.285476  0.004498  0.902807\n",
       "404220255  0.013685  0.081640  0.438843  0.003629  0.871949\n",
       "404220255  0.044388  0.081090  0.253320  0.006751  0.832106\n",
       "404220255  0.015785  0.077666  0.274483  0.003099  0.905408\n",
       "404220255  0.070875  0.080141  0.141413  0.006552  0.846100\n",
       "404220255  0.026953  0.082739  0.247282  0.006873  0.899505\n",
       "404220255  0.054814  0.085567  0.165434  0.012717  0.886349\n",
       "404220255  0.039566  0.079213  0.205911  0.007287  0.875733\n",
       "404220255  0.033271  0.067278  0.190820  0.011012  0.910060"
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def compare(ensemble_preds, filter):\n",
    "    result = ensemble_preds[0][filter]\n",
    "    for preds in ensemble_preds[1:]:\n",
    "        result = result.append(preds[filter])\n",
    "    return result\n",
    "\n",
    "compare(ensemble_preds, preds.index == 404220255)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>disp_E_p</th>\n",
       "      <th>disp_N_p</th>\n",
       "      <th>disp_J_p</th>\n",
       "      <th>disp_S_p</th>\n",
       "      <th>disp_B_p</th>\n",
       "      <th>maxcount</th>\n",
       "      <th>disp_E</th>\n",
       "      <th>disp_N</th>\n",
       "      <th>disp_J</th>\n",
       "      <th>disp_S</th>\n",
       "      <th>disp_B</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>tic_id</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "Empty DataFrame\n",
       "Columns: [disp_E_p, disp_N_p, disp_J_p, disp_S_p, disp_B_p, maxcount, disp_E, disp_N, disp_J, disp_S, disp_B]\n",
       "Index: []"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pl[pl.index == 421845505]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### PR curve"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "tics = set(ensemble_preds[0].index.values)\n",
    "\n",
    "tic_index = {v: i for i, v in enumerate(tics)}\n",
    "\n",
    "pred_es = np.zeros([len(ensemble_preds), len(tic_index)])\n",
    "for i, preds in enumerate(ensemble_preds):\n",
    "    for row in preds.iterrows():\n",
    "        tic, pred_e = row[0], row[1][col_e]\n",
    "        pred_es[i][tic_index[tic]] = pred_e\n",
    "\n",
    "lbl_es = np.zeros([len(tic_index)], dtype=np.bool)\n",
    "for row in tce_labels.iterrows():\n",
    "    tic, lbl_e = row[0], row[1]['disp_E']\n",
    "    if tic in tic_index:\n",
    "        lbl_es[tic_index[tic]] = (lbl_e > 0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "num_cond_pos = float(np.sum(lbl_es))\n",
    "\n",
    "def pr_at_th(th):\n",
    "    pred_pos = np.any(pred_es >= th, axis=0)\n",
    "    true_pos = pred_pos & lbl_es\n",
    "    num_pred_pos = int(np.sum(pred_pos))\n",
    "    num_true_pos = int(np.sum(true_pos))\n",
    "    if num_pred_pos == 0:\n",
    "        return 1.0, 0.0\n",
    "    return float(num_true_pos) / float(num_pred_pos), float(num_true_pos) / float(num_cond_pos)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "AUC: 0.9749829210844815, max R: 1.0, max P: 1.0\n",
      "100% recall at: 64%, threshold: 0.06799761581426361\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1200x740 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from matplotlib import pyplot as plt\n",
    "\n",
    "ps, rs, ths = ([], [], [])\n",
    "th = np.max(pred_es)\n",
    "while th >= 0.0:\n",
    "    p, r = pr_at_th(th)\n",
    "    if p > 0:\n",
    "        ps.append(p)\n",
    "        rs.append(r)\n",
    "    else:\n",
    "        ps.append(1.0)\n",
    "        rs.append(0.0)\n",
    "    ths.append(th)\n",
    "    th -= 0.0005\n",
    "    \n",
    "from sklearn import metrics\n",
    "\n",
    "print(f'AUC: {metrics.auc(rs, ps)}, max R: {max(rs)}, max P: {max(ps)}')\n",
    "    \n",
    "i = len(rs) - 1\n",
    "while rs[i] == 1.0:\n",
    "    i -= 1\n",
    "i += 1\n",
    "print(f'100% recall at: {int(ps[i] * 100)}%, threshold: {ths[i]}')\n",
    "\n",
    "fig, ax = plt.subplots(figsize=(6, 3.7), dpi=200)\n",
    "\n",
    "ax.spines['top'].set_color('#808080')\n",
    "ax.spines['right'].set_color('#808080')\n",
    "ax.spines['left'].set_color('#808080')\n",
    "ax.spines['bottom'].set_color('#808080')\n",
    "ax.tick_params(direction='in', color='#808080')\n",
    "\n",
    "plt.grid(color='#c0c0c0', linestyle='--', linewidth=0.5)\n",
    "\n",
    "plt.ylabel('Precision', fontweight='bold')\n",
    "plt.xlabel('Recall', fontweight='bold')\n",
    "\n",
    "plt.xlim((0.4, 1.0))\n",
    "plt.ylim((0.4, 1.0))\n",
    "\n",
    "_ = plt.plot(rs, ps)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
